package com.dx.financehy.modules.system.service;

import com.dx.financehy.base.CommonService;
import com.dx.financehy.modules.business.domain.dto.*;
import com.dx.financehy.modules.platformClassOne.domain.PlatformClassOne;
import com.dx.financehy.modules.platformClassOne.domain.dto.AddPlatformClassDTO;
import com.dx.financehy.modules.platformClassOne.domain.dto.DelPlatformClassDTO;
import com.dx.financehy.modules.platformClassOne.domain.dto.EditPlatformClassDTO;
import com.dx.financehy.modules.platformClassOne.domain.dto.GetPlatformClassDTO;
import com.dx.financehy.modules.platformClassTwo.domain.PlatformClassTwo;
import com.dx.financehy.modules.platformClassTwo.domain.dto.GetPlatformClassTwoDTO;
import com.dx.financehy.modules.share.domain.UserShare;
import com.dx.financehy.modules.system.domain.User;
import com.dx.financehy.modules.system.domain.dto.*;
import com.dx.financehy.modules.system.domain.vo.BusinessVO;
import com.dx.financehy.modules.system.domain.vo.GetBusinessListVO;
import com.dx.financehy.modules.system.domain.vo.IsProcessListVO;

import java.util.List;

/**
 * @author: huang_jigao
 * @Title: UserService
 * @ProjectName: financehy
 * @Description:
 * @date: 2023-12-05 15:21
 */
public interface UserService extends CommonService<User> {
    /**
     * 新增用户
     *
     * @param req
     */
    void addSysUser(AddUserDTO req);

    /**
     * 登录新增用户
     *
     * @param req
     */
    User addLoginSysUser(AddUserDTO req);

    /**
     * 个人资料
     *
     * @param req
     */
    void updateById(UserDto req);

    /**
     * 个人资料
     *
     * @param req
     */
    void delSysUser(BaseDTO req);

    /**
     * 获取用户信息
     *
     * @param getCurrentUsername
     * @return
     */
    User getByUsername(String getCurrentUsername);

    /**
     * 根据wxOpenId获取用户信息
     *
     * @param wxOpenId
     * @return
     */
    User getByOpenId(String wxOpenId);

    /**
     * 修改密码
     *
     * @param username        用户名
     * @param encryptPassword 密码
     */
    void updatePass(String username, String encryptPassword, String token);

    /**
     * 获取商家列表
     *
     * @param dto
     * @return
     */
    List<GetBusinessListVO> getBusinessList(GetBusinessListDTO dto);

    /**
     * 获取商家列表
     *
     * @param dto
     * @return
     */
    List<GetBusinessListVO> getTouristList(GetBusinessListDTO dto);

    /**
     * 获取平台资源列表
     *
     * @param dto
     * @return
     */
    List<PlatformClassOne> getPlatformClassList(GetPlatformClassDTO dto);

    /**
     * 获取待审核平台资源和主营业务表
     *
     * @param dto
     * @return
     */
    List<IsProcessListVO> getIsProcessList(IsProcessListDTO dto);

    /**
     * 审核平台资源和主营业务
     *
     * @param dto
     */
    void processPlatOrBusiness(ProcessPlatOrBusinessDTO dto);

    /**
     * 获取总平台资源列表
     *
     * @param dto
     * @return
     */
    List<PlatformClassOne> getAllPlatformClassList(GetPlatformClassDTO dto);

    /**
     * 获取平台资源二级列表
     *
     * @param dto
     * @return
     */
    List<PlatformClassTwo> getPlatformClassTwoList(GetPlatformClassTwoDTO dto);

    /**
     * 新增平台资源
     *
     * @param dto
     */
    void addPlatformClass(AddPlatformClassDTO dto);

    /**
     * 编辑平台资源
     *
     * @param dto
     */
    void editPlatformClass(EditPlatformClassDTO dto);

    /**
     * 删除平台资源
     *
     * @param dto
     */
    void delPlatformClass(DelPlatformClassDTO dto);

    Boolean updateUser(UpdateUserInfoDTO dto);

    /**
     * 编辑主营业务-获取主营业务
     *
     * @return
     */
    List<BusinessVO> getEditBusinessList();

    /**
     * 编辑主营业务-新增获取一级主营业务
     *
     * @param dto
     */
    void addBusiness(AddBusinessDTO dto);

    /**
     * 编辑主营业务-新增获取二级主营业务
     *
     * @param dto
     */
    void addBusinessTwo(AddBusinessTwoDTO dto);

    /**
     * 编辑主营业务
     *
     * @param dto
     */
    void editBusiness(EditBusinessDTO dto);

    /**
     * 编辑主营业务
     *
     * @param dto
     */
    void editBusinessTwo(EditBusinessTwoDTO dto);

    /**
     * 编辑主营业务
     *
     * @param dto
     */
    void delBusiness(DelBusinessDTO dto);

    /**
     * 编辑二级主营业务
     *
     * @param dto
     */
    void delBusinessTwo(DelBusinessTwoDTO dto);

    UserShare addShare(UserShare req);

    UserShare getShareDetail(UserShare req);

    Integer getMaxVisitorIndex();
}
